package com.zrrd.threadMethods.callableDemo01;

import java.util.concurrent.Callable;

/**
 * @author WanJl
 * @version 1.0
 * @title MyCallable
 * @description
 * -定义一个类MyCallable实现Callable接口，并且可以指定泛型
 * -在MyCallable类中重写call()方法
 * -创建MyCallable类的对象
 * -创建Future的实现类FutureTask对象，把MyCallable对象作为构造方法的参数
 * -创建Thread类的对象，把FutureTask对象作为构造方法的参数
 * -启动线程
 * -再调用get方法，就可以获取线程结束之后的结果。
 * @create 2024/6/16
 */
//1、定义一个类MyCallable实现Callable接口，并且可以指定泛型
public class MyCallable implements Callable<Integer> {
    //2、在MyCallable类中重写call()方法
    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            //getName()获取当前线程的名称
            //Thread.currentThread().getName() 获取当前正在执行的线程的名称
            System.out.println(Thread.currentThread().getName()+"-->"+i);
            sum += i;
        }
        //Callable接口的call方法和Runnable接口的run方法的区别：
        //call可以抛出异常
        //call具有返回值类型，返回值的类型由Callable指定泛型
        return sum;
    }
}
